МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
Лабороторна робота №3
Побудова інфрачервоних детекторів руху
на AVR-мікроконтролерах
з курсу
"МІКРОПРОЦЕСОРНІ ПРИСТРОЇ"
Варіант № 27
Мета роботи: ознайомитись з будовою та принципом дії інфрачервоних детекторів руху і їх програмно-апаратною реалізацією на AVR-мікроконтролерах.
Завдання
Домашня підготовка до роботи
1. Вивчити теоретичний матеріал.
2. Вивчити основні властивості мікроконтролера AT90S2313, принципи побудови інфрачервоних детекторів руху необхідні для виконання лабораторної роботи.
3. Підготовити програму функціонування інфрачервоного детектора руху згідно індивідуального завдання в табл. 1.
Виконати в лабораторії
1. Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
2. В режимі покрокової відладки переконатися в правильності роботи програми, перевірити дотримання заданих в завданні часових параметрів та умов спрацювання.
3. Відкрити файл LR_3.dsn в програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл та асемблерний файл.
4. Запустити режим симуляції схеми та перевірити правильність функціонування детектора руху у всіх режимах роботи.
табл.1
№ вар.
Тактова частота МК, МГц
Період опитування
АЦП TADC, с
Максимальний
рівень шуму, мкВ
Коефіцієнт підсилення аналогових кіл KU
Час встановлення
PIR-давача TSet, с
Час включення
світлодіода TAlarm, с
Вивід МК для підключення
світлодіода
Виводи МК
для підключення
АЦП
27
4
0,27
280
23
4
РВ4
PB0,1,2,3
Лістинг програми:
.nolist
.include "2313def.inc"
.list
.def temp=r16
.def ACP_res1=r17
.def ACP_res2=r18
.def cmp1=r19
.def cmp2=r20
.def Delay1=r21
.def Delay2=r22
.def Delay3=r23
.equ VTR_low=1961
.equ VTR_high=3038
.equ T_Delay=3199997;4 sec
.equ ACP_D=101
.equ TimerVal=215997 ;0.27 sec
.equ Setup=18399997 ; 23 sec
.equ nSHDN=PB0
.equ nCS=PB1
.equ SCLK=PB2
.equ DOUT=PB3
.equ Led=PB4
.cseg
.org 0
rjmp Main ; RESET interupt
.org 0x04
rjmp TIMER_EXT ; Timer1 overlow
;*************************************************
Main:
; Ініціалізація стеку
ldi temp, low(RAMEND)
out spl, temp
; налаштування виводів
sbi DDRB, nSHDN
cbi DDRB, DOUT
sbi DDRB,nCS
sbi DDRB, SCLK
sbi DDRB, Led
sbi PORTB, Led
; затримка на встановлення PIR давача
ldi Delay1, low(Setup)
ldi Delay2, high(Setup)
ldi Delay3, byte3(Setup)
rcall Delay
; налаштування таймера
; занести старший байт
ldi temp, high(TimerVal)
out OCR1AH, temp
; занести молодший
ldi temp, low(TimerVal)
out OCR1AL, temp
ldi temp, (1<<OCIE1A)
out TIMSK, temp
ldi temp, (1<<CTC1) + (1<<CS11)
out TCCR1B, temp
; енергозберігаючий режим
ldi temp, (1<<SE)
out MCUCR, temp
sei
wait:
sleep
rjmp wait
;****************************************************
TIMER_EXT:
ldi temp, high(TimerVal) ; задання кількості тактів
out TCNT1H, temp
ldi temp, low(TimerVal)
out TCNT1L, temp
; отримати дані з АЦП
rcall GetACP_Res
; порівняти отримані дані з нижнім рівнем сигналу
ldi cmp1, low(VTR_low)
ldi cmp2, high(VTR_low)
cp ACP_Res1, cmp1 ; порівняти молодші байти
cpc ACP_Res2, cmp2 ; порівняти старші байти і перенос
brcs Alarm ; значення менше за нижній поріг
; Порівняти з верхнім порогом
ldi cmp1, low(VTR_high)
ldi cmp2, high(VTR_high)
cp cmp1, ACP_Res1 ; порівняти молодші байти
cpc cmp2, ACP_Res2 ; порівняти старші байти і перенос
brcs Alarm ; значення менше за нижній поріг
; значення є в допустимих межах - виходимо
reti
Alarm:
cbi PORTB, Led ; вмикаємо світлодіод
; завантажуємо затримку світіння світлодіода
ldi Delay1, low(T_Delay)
ldi Delay2, high(T_Delay)
ldi Delay3, byte3(T_Delay)
rcall Delay ; затримка
; вимакаємо світлодіод
sbi PORTB, Led
reti
;******************************************************
GetACP_Res:
sbi PORTB, nCS ; ініціалізуємо вихід
sbi PORTB, nSHDN ; вмикаєм...